package edu.whut.Polymorphism;
/*
多态的成员访问特点：
    1.成员变量：编译看左边（父类），运行看左边（父类）
    2.成员方法：编译看左边（父类），运行看右边（子类）
        在编译的时候，会检查父类中有没有这个方法
            没有：编译出错
            有：编译出错，但是运行的时候，一定会执行子类的方法（因为父类是抽象方法）
    3.静态成员（推荐类名调用）:用对象名调用时，生成字节码文件后会把对象名改为类目调用
 */
public class duotai02 {
    public static void main(String[] args) {

        Fu f = new Zi();
        //用这种方法访问的是父类的成员变量
        System.out.println(f.num);
        //用这种方法访问的是子类的成员方法
        f.show();
        System.out.println("------------------------");
        //下边同样是父类引用指向子类对象
        Inter i = new InterImpl();
        i.method();
        System.out.println("------------------------");
        f.print();//自动改为类目调用，当然是父类
        Fu.print();
        Zi.print();
    }
}
interface Inter{
    void method();
}
class InterImpl implements Inter{

    @Override
    public void method() {
        System.out.println("接口的实现类method--");
    }
}
class Fu{
    int num = 10;
    public void show(){
        System.out.println("Fu---show");
    }
    public static void print(){
        System.out.println("Fu---print");
    }
}
class Zi extends Fu{
    int num = 20;
    @Override
    public void show(){
        System.out.println("Zi---show");
    }
    public static void print(){
        System.out.println("Zi---print");
    }
}